package containers;

import java.util.*;

public class Lists {
    private static boolean b;
    private static String s;
    private static int i;
    private static Iterator<String> ite;
    private static ListIterator<String> lite;
    private static List<String> testList = Arrays.asList(("A,B,C,D,E,F,G,H,I,J,K,L,M,N").split(","));
    public static void basicTest(List<String> a){
        a.add(1,"X");
        a.add("X");
        a.addAll(testList);
        a.addAll(3,testList);
        b = a.contains("1");
        b = a.containsAll(testList);
        s = a.get(1);
        i = a.indexOf("1");
        b = a.isEmpty();
        ite = a.iterator();
        lite = a.listIterator();
        lite = a.listIterator(3);
        i = a.lastIndexOf("1");
        a.remove(1);
        a.remove("3");
        a.set(1,"y");
        a.retainAll(testList);
        a.removeAll(testList);
        a.clear();
    }

    public static void iterMotion(List<String> a){
        ListIterator<String> it = a.listIterator();
        b  = it.hasNext();
        b = it.hasPrevious();
        s = it.next();
        i = it.nextIndex();
        s = it.previous();
        i = it.previousIndex();
    }

    public static void iterManipulation(List<String> a){
        ListIterator<String> it = a.listIterator();
        it.add("47");
        it.next();
        it.remove();
        it.next();
        it.set("47");
    }

    public static void testVisual(List<String> a){
        System.out.println(a);
        List<String> b = testList;
        System.out.println("b = "+b);
        a.addAll(b);
        a.addAll(b);
        System.out.println(a);
        ListIterator<String> x = a.listIterator(a.size()/2);
        x.add("one");
        System.out.println(a);
        System.out.println(x.next());
        x.remove();
        System.out.println(x.next());
        x.set("47");
        System.out.println(a);
        x = a.listIterator(a.size());
        while (x.hasPrevious()){
            System.out.println(x.previous() + " ");
        }
        System.out.println();
        System.out.println("testVisual finished");
    }
    public static void testLinkedList(){
        LinkedList<String> ll = new LinkedList<String>();
        ll.addAll(testList);
        System.out.println(ll);
        ll.addFirst("one");
        ll.addFirst("two");
        System.out.println(ll);
        System.out.println(ll.getFirst());
        System.out.println(ll.removeFirst());
        System.out.println(ll.removeFirst());
        System.out.println(ll.removeLast());
        System.out.println(ll);
    }

    public static void main(String[] args){
        basicTest(new LinkedList<String>(testList));
        basicTest(new ArrayList<String>(testList));
        iterMotion(new LinkedList<String>(testList));
        iterMotion(new ArrayList<String>(testList));
        iterManipulation(new LinkedList<String>(testList));
        iterManipulation(new ArrayList<String>(testList));
        testVisual(new LinkedList<String>(testList));
        testLinkedList();
    }
}
